From: Isaku Yamahata Date: Tue, 4 Nov 2008 03:07:22 +0000 (+0900) Subject: [IA64] Fix HVM VGA abnormal. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14055 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=d389ee3861bcb00815809e3bc446721ebb2e81c6;p=xen.git [IA64] Fix HVM VGA abnormal. Conversion from p2m entry to physical address, it needs to use _PAGE_PPN_MASK to mask out some bits which are used by other purposes by p2m entry. Sign-off-by : Xiantao Zhang --- diff --git a/xen/arch/ia64/vmx/vtlb.c b/xen/arch/ia64/vmx/vtlb.c index fa7ed2b7e0..d465150722 100644 --- a/xen/arch/ia64/vmx/vtlb.c +++ b/xen/arch/ia64/vmx/vtlb.c @@ -522,7 +522,8 @@ static u64 translate_phy_pte(VCPU *v, u64 pte, u64 itir, u64 va) * which is required by vga acceleration since qemu maps shared * vram buffer with WB. */ - if (mfn_valid(maddr >> PAGE_SHIFT) && phy_pte.ma != VA_MATTR_NATPAGE) + if (mfn_valid((maddr & _PAGE_PPN_MASK) >> PAGE_SHIFT) + && phy_pte.ma != VA_MATTR_NATPAGE) phy_pte.ma = VA_MATTR_WB; maddr = ((maddr & _PAGE_PPN_MASK) & PAGE_MASK) | (paddr & ~PAGE_MASK); diff --git a/xen/arch/ia64/xen/mm.c b/xen/arch/ia64/xen/mm.c index 1d530e77ce..518d225c5a 100644 --- a/xen/arch/ia64/xen/mm.c +++ b/xen/arch/ia64/xen/mm.c @@ -926,7 +926,8 @@ __assign_domain_page(struct domain *d, /* in HVM guest, when VTD is enabled, * P2M entry may change from _PAGE_IO type to real MMIO page */ - if(VMX_DOMAIN(d->vcpu[0]) && (pte_val(ret_pte) & _PAGE_IO)) { + if(is_hvm_domain(d) && (pte_val(ret_pte) & _PAGE_IO) && + !mfn_valid(physaddr >> PAGE_SHIFT)) { old_pte = ret_pte; goto again_hvm_page_io; }